package com.hejing.面向对象特征之三_多态.向下转型;

/**
 * ClassName: PersonTest
 * Package: com.hejing.面向对象特征之三_多态.初识多态
 * Description:
 *
 * @Author: HeJing
 * @Create: 2023-03-26 11:28
 * @Version: 1.0
 */
public class PersonTest {
    public static void main(String[] args) {

        // 转型测试:
        Person p1 = new Man();

        // 报错，不能直接调用子类特有的方法 (或者特有的属性)
        // p1.earnMoney();

        // 进行向下转型之后进行调用:
        Man m1 = (Man)p1;
        m1.earnMoney();
        System.out.println(m1 == p1);  // true, 说明m1和p1指向内存中的同一个对象。

        // 向下转型可能存在的问题: ClassCastException
        Person p2 = new Woman();
        // Man m2 = (Man) p2;
        // m2.earnMoney();

        // 建议在进行向下转型之前，使用instanceof进行判断，避免出现类型转换异常。
        if(p2 instanceof Woman) {
            Woman m2 = (Woman)p2;
            m2.goShopping();
        }

    }
}





















